home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
misc
/
amag
/
sh9301e.lha
/
Maxon-CPP-Demo
/
Source
/
Complex.C
next >
Wrap
C/C++ Source or Header
|
1993-02-17
|
3KB
|
139 lines
// Einfache Implementierung komplexer Zahlen in C++
//
// Geschrieben von Jens Gelhar 20.11.92
#include <iostream.h> // Includedatei für Ein- und Ausgabe
// ***** Die Klassendefinition und Funktionsprototypen *****
class Complex
{ public: // d. h. keine privaten Bezeichner
double r, i; // Real- und Imaginärteil
Complex(double re=0, double im=0); // Konstruktor
Complex conj() const; // berechnet konjugiert-komplexe
};
// Die vier Grundrechenarten:
Complex operator + (const Complex &c1, const Complex &c2);
Complex operator - (const Complex &c1, const Complex &c2);
Complex operator * (const Complex &c1, const Complex &c2);
Complex operator / (const Complex &c1, const Complex &c2);
// Vergleichs-Operationen:
int operator == (const Complex &c1, const Complex &c2);
int operator != (const Complex &c1, const Complex &c2);
// Ausgabe-Funktion:
ostream &operator << (ostream &os, const Complex &c);
// ***** Implementation *****
Complex::Complex(double re, double im)
{
r = re;
i = im;
}
Complex Complex::conj() const
{
Complex ergebnis(r, -i);
return ergebnis;
}
Complex operator + (const Complex &c1, const Complex &c2)
{
Complex ergebnis(c1.r+c2.r, c1.i+c2.i);
return ergebnis;
}
Complex operator - (const Complex &c1, const Complex &c2)
{
Complex ergebnis(c1.r-c2.r, c1.i-c2.i);
return ergebnis;
}
Complex operator * (const Complex &c1, const Complex &c2)
{
Complex ergebnis;
ergebnis.r = c1.r*c2.r - c1.i*c2.i;
ergebnis.i = c1.r*c2.i + c1.i*c2.r;
return ergebnis;
}
Complex operator / (const Complex &c1, const Complex &c2)
{
Complex nenner = c1 * c2.conj();
double zaehler = c2.r*c2.r + c2.i*c2.i;
return Complex(nenner.r/zaehler, nenner.i/zaehler);
}
int operator == (const Complex &c1, const Complex &c2)
{
return (c1.r == c2.r && c1.i == c2.i);
}
int operator != (const Complex &c1, const Complex &c2)
{
return (c1.r != c2.r || c1.i != c2.i);
}
ostream &operator << (ostream &os, const Complex &c)
{
if(c.r != 0)
{ if (c.i > 0)
os << "(" << c.r << " +" << c.i << "i)";
else if (c.i < 0)
os << "(" << c.r << " -" << -c.i << "i)";
else
os << c.r;
}
else
if (c.i != 0)
os << c.i << "i";
else
os << "0";
return os;
}
// ***** Ein simples Beispielprogramm: *****
void main()
{
Complex x, y;
cout << "Bitte geben Sie zwei komplexe Zahlen ein:" << endl;
cout << "x (Realteil): ";
cin >> x.r;
cout << "x (Imaginärteil): ";
cin >> x.i;
cout << "y (Realteil): ";
cin >> y.r;
cout << "y (Imaginärteil): ";
cin >> y.i;
cout << endl;
cout << "x + y = " << x+y << endl;
cout << "x - y = " << x-y << endl;
cout << "x * y = " << x*y << endl;
cout << "x / y = " << x/y << endl;
}